//
//  RBOauthViewController.swift
//  myWeiBo
//
//  Created by 刘邓诏初 on 16/4/9.
//  Copyright © 2016年 刘邓诏初. All rights reserved.
//

import UIKit
import SVProgressHUD

class RBOauthViewController: UIViewController {
    
    // 在loadView里面赋值不用设置view的大小
    override func loadView() {
        view = webView
        // 设置代理
        webView.delegate = self
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // 设置背景颜色,不然在modal出来的时候,会透明看到后面的控制器,效果很奇怪
        view.backgroundColor = RBBackgroundColor
        
        //设置导航栏的左右按钮
        setupNavigationBar()
        
        // 加载授权界面
        let url = oauthURL()
//        RBPrint(url)
        let URLRequest: NSURLRequest = NSURLRequest(URL: url)
        webView.loadRequest(URLRequest)
        
        // 添加指示器
        SVProgressHUD.showWithStatus("正在加载中。。。", maskType: .Gradient)
        
    }
    
    /// 拼接Oauth授权登录界面的url（GET）
    private func oauthURL() -> NSURL {
        let urlString = OauthUrl + "?client_id=" + client_id + "&redirect_uri=" + redirect_uri
        return NSURL(string: urlString)!
    }
    
    /**
    设置导航栏的左右按钮
    */
    private func setupNavigationBar(){
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "填充", style: .Plain, target: self, action: ("autoFill"))
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "取消", style: .Plain, target: self, action: Selector("close"))
    }
    
    // MARK: - 按钮点击事件
    @objc private func autoFill(){
        let js = "document.getElementById('userId').value = '18656562566';document.getElementById('passwd').value = 'ldzc2383812'"
        webView.stringByEvaluatingJavaScriptFromString(js)
        
    }
    
    @objc private func close(){
        dismissViewControllerAnimated(true, completion: nil)
    }
    
    // MARK: - 懒加载
    private lazy var webView: UIWebView = UIWebView()
    
}

extension RBOauthViewController: UIWebViewDelegate{
    // webView是否要去加载一个请求
    // true: 放行,可以加载
    // false: 拦住,不去加载
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
//        RBPrint( "加载\(request)")
        // 请求的url字符串
        let urlStr: String = (request.URL?.absoluteString)!
        RBPrint(urlStr)
        // 判断是否是授权回调地址
        let isRedirectURL: Bool = urlStr.hasPrefix(redirect_uri)
        
        if isRedirectURL{
            // 是授权回调地址
            // 授权回调地址,点击的是取消或授权
            // 判断点击的是取消还是授权按钮, 如果?后面是code=开头就是授权按钮
            // query是get请求?后面的东西
            let query = request.URL?.query
            
            RBPrint(query)
            // 点击授权按钮时，query 是以 “code=“开头的
            
            let codeStr = "code="
            
            if query!.hasPrefix(codeStr) {
                RBPrint("点击了授权按钮\(query)")
                // code=c298b3f34f8264318637e54ad81ceae2
                // 截取 code= 后面的内容
                //截取方式一：
                let index = codeStr.endIndex
                let code = query!.substringFromIndex(index)
                RBPrint(code)
                RBUserAccountViewModel.sharedInstance.loadAccessToken(code)
                
            }else{
                RBPrint("点击了取消按钮")
                // 关闭授权界面
                close()
            }
            return false
            
        }else{
            
            // 不是授权回调地址
            return true
        }
    }

//    /// 获取accessToken
//    private func loadAccessToken(code: String){
//        // accessToken的url地址
//        let urlStr = accessTokenURLString
//        
//        // 参数 - 字典
//        let parameters = [
//            "client_id" : client_id,
//            "client_secret" : client_secret,
//            "grant_type" : grant_type,
//            "code" : code,
//            "redirect_uri" : redirect_uri
//        ]
//        
//        // 发送请求 ,afn.POST
//        RBNetworkTool.sharedInstance.POST(urlStr, parameters: parameters, progress: nil, success: { (task, responseObject) -> Void in
//            
//            RBPrint("授权成功 \(responseObject)")
//            
//            let result = responseObject as? [String : AnyObject]
//            
//            if let dict = result {
//                // 字典转模型
//                let userAccount = RBUserAccount(dic: dict)
//                RBPrint("转模型成功\(userAccount)")
//                
//                // 将模型数据保存
//                // 路径
//                let accountPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!.stringByAppendingString("/account.plist")
//                RBPrint(accountPath)
//                
//                // 归档
//                NSKeyedArchiver.archiveRootObject(userAccount, toFile: accountPath)
//                
//                
//            }
//            
//            }) { (task, error) -> Void in
//                
//                RBPrint("授权失败\(error)")
//        }
//        
//        
//        
//    }
    
    // MARK: - 代理方法
    // webView 加载完成
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
    }
    // webView 加载失败
    func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
//        RBPrint("======错误是\(error)")
        if error?.code == 102 {
            // 点击取消,加载被中断
            return
        }
        SVProgressHUD.showErrorWithStatus("网络不给力...")
        SVProgressHUD.setDefaultMaskType(SVProgressHUDMaskType.None)
    }
}
